<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:db="http://docbook.org/ns/docbook">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="Content-Style-Type" content="text/css" />
    <title>Správa buildu a testování</title>
  </head>
  <body>
		<h1>Správa buildu a testování</h1>
		<h2>
				Jakub Čajka
			  </h2>
	
		<h3>Správa buildu a testování</h3>
		<p> Mým úkolem v našem projektu je správa buildu a automatické
			testování.</p>

		<p>Jako základ našeho projektu jsme použili základní Java projekt
			z NetBeans využívající ke správě bildu Ant. Zvažoval jsem možnost
			požití Mavenu pro správu buildu, ale ten se pro naše použití jevil
			jako zbytečně komplexní a komplikované řešení. Jak už jsem zmínil
			požili jsme defaultní build pro kompilaci programu. Větší problém
			byl s implementací testování, jelikož bylo nutné nejprve
			spustit zkompilovaný program s danými vstupními soubory (XML
			schématy). Následně vygenerované soubory se zdrojovými kódy parseru
			zkompilovat a nakonec zkompilované třídy otestovat jednotkovými testy
			založenými na JUnit.</p>

		<p>Pro celý proces jsem implementoval přidáním několik targetů
			v Antu a doimplementoval chování předpřipraveného tasku
			-post-compile-test. Samotné spuštění testů začíná voláním targetu
			-post-compile-test, který je závislý na targetu -test-clean-up,
			který
			provádí úklid po možném předchozím testu. Po provedení tohoto targetu
			již následuje vykonání -post-compile-test, ve kterém je zaprvé
			vytvořena kopie testovacích adresářů obsahujících testovací vstupní
			data, poté je sestaven samotný program (soubor .jar s vlastním
			manifestem). Následuje postupné spouštění programu se všemi vstupními
			schématy. Poté se postupně kompilují vygenerované soubory. Napřed
			entity, posléze samotný parser, a to z důvodu toho, že kompilace
			automaticky selže, pokud je byť jen jeden soubor nekompilovatelný.
			Tedy entity mohou být v pořádku, ale třída parseru nikoliv a stále
			může být test alespoň částečně úspěšný (víme, že generujeme entity
			správně, ale parser nikoliv). Poté již následuje samotné spuštění
			jednotkových testů. V těchto testech jsem narazil na největší problém
			způsobený nutností zavedení třídy ze souboru až za běhu
			programu (testu). To se mi podařilo vyřešit vytvořením vlastního ClassLoaderu, 
			který mi zavádí očekávané třídy. Vytváření instancí a volání
			jejich metod mi umožňuje Java Reflection API.</p>

		<p>Samotné testy testují jednotlivá schémata se zvyšující se
			složitostí.
			Současný stav implementovaných testů zabírá okruh vlastností, které
			jsme si ustanovili jako minimum pro odevzdání.</p>
	
		<p>Vypracoval Jakub Čajka (409795@mail.muni.cz)</p>
	</body>
</html>
